<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of Reserva
 *
 * @author Ivan
 */
class reserva extends CI_Model{
    //put your code here
    var $id;
    var $id_cliente;
    var $fecha_reserva;
    var $fecha_llegada;
    var $fecha_salida;
    var $hora_llegada;
    var $hora_salida;
    var $id_usuario;
    var $fecha_usuario;
    var $estado;
    var $monto;
    var $id_habitacion;
    var $nombre;
    var $apellido;
    var $domicilio;
    var $provincia;
    var $pais;
    var $localidad;
    var $documento;
    var $telefono;
    var $celular;
    var $email;
    var $fecha_nac;
    var $codigo_postal;
    var $obs;
    var $eliminado;
    var $idreserva;
    var $montor;
    var $fecha;
    var $montoc;
    var $montot;
    var $deposito;
    var $cant_adultos;
    var $cant_menores;
    var $senia;
    var $fecha_senia;
    var $pagado;
    var $notas;
    var $id_procedencia;
    var $late;
    var $varId;
    var $cuit;
    
     function __construct() {
        parent::__construct();       
    }
    
    function nuevo($dia,$mes,$anio, $habitacion, $cliente){
        
        $id_cliente=0;
        $usua=$this->session->userdata('usuario');
        
        if($cliente == 0 ){
            $sql_clie="INSERT INTO t_clientes (nombre, apellido,fecha_nac, documento,domicilio, localidad, provincia, pais, telefono, celular, email,codigo_postal, fecha_usuario, id_usuario, obs, eliminado,cuit) 
                        values('".$_POST["nombre"]."','".$_POST["apellido"]."','".$_POST["fecha_nac"]."','".$_POST["documento"]."','".$_POST["domicilio"]."','".$_POST["localidad"]."','".$_POST["provincia"]."','".$_POST["pais"]."','".$_POST["telefono"]."','".$_POST["celular"]."','".$_POST["email"]."','".$_POST["codigo_postal"]."',NOW(),'".$usua."','".$_POST["obs"]."',0,'".$_POST["cuit"]."')"; 

            $this->db->trans_start();
            $this->db->query($sql_clie);
            $this->db->trans_complete(); 
            if($this->db->trans_status() == FALSE)
            {
                show_error('Error en la insercion. CODIGO: ' . $this->db->_error_message());
            }
            
            $this->db->select_max('id','nro');
            $consulta = $this->db->get('t_clientes');
            if ($consulta->num_rows() > 0)
            {
               $row = $consulta->row_array(); 
               $id_cliente =  $row['nro'];
            }

        }
        else 
        {
            $id_cliente= $cliente;
        }
       
        
        //if ($_POST["id_procedencia"]==2){
        //    $pagado=1;
       // }else{
            $pagado=0;
       // }
        
       $sql_res="INSERT INTO t_reservas (id_cliente, fecha_reserva, fecha_llegada,fecha_salida,hora_llegada, hora_salida,monto, estado, fecha_usuario, id_usuario, id_habitacion, id_tipo_habitacion, id_procedencia,cant_adultos, cant_menores, senia, fecha_senia,deposito, sin_cargo, pagado,notas, late) 
                   values('".$id_cliente."',NOW(),'".$_POST["fecha_llegada"]."','".$_POST["fecha_salida"]."','".$_POST["hora_llegada"]."','".$_POST["hora_salida"]."','".str_replace (",",".",$_POST['monto'])."','".$_POST["estado"]."',NOW(),'".$usua."','".$_POST["id_habitacion"]."','".$_POST["id_tipo_habitacion"]."','".$_POST["id_procedencia"]."','".$_POST["cant_adultos"]."','".$_POST["cant_menores"]."','".str_replace (",",".",$_POST['senia'])."','".$_POST["fecha_senia"]."','".$_POST["deposito"]."','".$_POST["sin_cargo"]."','".$pagado."','".$_POST["notas"]."','".$_POST["monto_late"]."')"; 
       
        $this->db->trans_start();
        $this->db->query($sql_res);
        $this->db->trans_complete(); 
        if($this->db->trans_status() == FALSE)
        {
            show_error('Error en la insercion. CODIGO: ' . $this->db->_error_message());
        }
//        if ($_POST["id_procedencia"]==2){
//            $this->db->select_max('id','nro');
//            $consulta = $this->db->get('t_reservas');
//            if ($consulta->num_rows() > 0)
//            {
//               $row = $consulta->row_array(); 
//               $id_reser =  $row['nro'];
//            }
//            $sql="UPDATE t_reservas SET pagado=1,senia=(DATEDIFF( t_reservas.fecha_salida, t_reservas.fecha_llegada )*monto), fecha_senia=NOW() WHERE id='".$id_reser."'";
//            $this->db->trans_start();
//            $this->db->query($sql);
//            $this->db->trans_complete();
//            if($this->db->trans_status() == FALSE)
//            {
//                show_error('Error en la insercion. CODIGO: ' . $this->db->_error_message());
//            }else{
//                header('Location: ' . base_url() . 'creserva'); 
//            }
//
//           }else{
               header('Location: ' . base_url() . 'creserva'); 
           //}
        
        
        
    }
    
    public function modificar($id,$idcliente,$senia)
    {
         $usua=$this->session->userdata('usuario');
        $sql_clie="UPDATE t_clientes SET nombre='".$_POST["nombre"]."', cuit='".$_POST["cuit"]."',apellido='".$_POST["apellido"]."',fecha_nac='".$_POST["fecha_nac"]."', documento='".$_POST["documento"]."',domicilio='".$_POST["domicilio"]."', localidad='".$_POST["localidad"]."', 
                    provincia='".$_POST["provincia"]."', pais='".$_POST["pais"]."', telefono='".$_POST["telefono"]."', celular='".$_POST["celular"]."', email='".$_POST["email"]."',codigo_postal='".$_POST["codigo_postal"]."', fecha_usuario=NOW(), id_usuario='".$usua."', obs='".$_POST["obs"]."'WHERE id='".$idcliente."'"; 

        $this->db->trans_start();
        $this->db->query($sql_clie);
        $this->db->trans_complete(); 
        if($this->db->trans_status() == FALSE)
        {
            show_error('Error en la insercion. CODIGO: ' . $this->db->_error_message());
        }
        
       
        
        $this->id_cliente = $idcliente;
        $this->fecha_reserva = date('Y-m-d H:i:s');
        $this->fecha_llegada = $_POST["fecha_llegada"];
        $this->fecha_salida = $_POST["fecha_salida"];
        $this->hora_llegada = $_POST["hora_llegada"];
        $this->hora_salida = $_POST["hora_salida"];
        $this->monto =str_replace (",",".",$_POST['monto']);
        $this->estado = $_POST["estado"];
        $this->fecha_usuario = date('Y-m-d H:i:s');   
        $this->id_usuario =$this->session->userdata('usuario');
        $this->id_habitacion = $_POST["id_habitacion"];
        $this->id_tipo_habitacion =$_POST["id_tipo_habitacion"];
        $this->id_procedencia =$_POST["id_procedencia"];
        $this->cant_adultos =$_POST["cant_adultos"];
        $this->cant_menores =$_POST["cant_menores"];        
        $this->senia =str_replace (",",".",$senia);
        if($senia==0)
            $this->fecha_senia= null;
        else
            $this->fecha_senia =$_POST["fecha_senia"];
        $this->deposito =$_POST["deposito"];
        $this->sin_cargo =$_POST["sin_cargo"];
        $this->notas =$_POST["notas"];
        $this->late =$_POST["monto_late"];

        
        $datos = array(
            'id_cliente'=>$idcliente,
            'fecha_llegada'=>$_POST['fecha_llegada'],
            'fecha_salida' => $_POST["fecha_salida"],
            'hora_llegada'=>$_POST['hora_llegada'],
            'hora_salida' => $_POST["hora_salida"],
            'monto' => $_POST['monto'],
            'estado' => $_POST['estado'],
            'notas' => $_POST['notas'],
            'id_habitacion' => $_POST["id_habitacion"],
            'fecha_usuario' => date('Y-m-d H:i:s'),
            'id_usuario' => $this->session->userdata('usuario'),
            'id_tipo_habitacion' => $_POST["id_tipo_habitacion"],
            'id_procedencia' => $_POST["id_procedencia"],
            'cant_adultos' => $_POST["cant_adultos"],
            'cant_menores' => $_POST["cant_menores"],
            'senia' => $senia,
            'fecha_senia' => $_POST["fecha_senia"],
            'deposito' => $_POST["deposito"],
            'sin_cargo' => $_POST["sin_cargo"],
            'late' => $_POST["monto_late"],
           );
        
            $this->db->trans_start();
            $this->db->where('id',$id);
            $this->db->update('t_reservas',$datos);
            $this->db->trans_complete();
            if($this->db->trans_status() == FALSE)
            {
                show_error('Error en la insercion. CODIGO: ' . $this->db->_error_message());
            }
//            if ($_POST["id_procedencia"]==2){
//                $sql="UPDATE t_reservas SET pagado=1,senia=(DATEDIFF( t_reservas.fecha_salida, t_reservas.fecha_llegada )*monto), fecha_senia=NOW() WHERE id='".$id."'";
//                $this->db->trans_start();
//                $this->db->query($sql);
//                $this->db->trans_complete();
//                if($this->db->trans_status() == FALSE)
//                {
//                    show_error('Error en la insercion. CODIGO: ' . $this->db->_error_message());
//                }else{
//                    header('Location: ' . base_url() . 'creserva'); 
//                }
//            
//               }else{
                   header('Location: ' . base_url() . 'creserva'); 
               //}
           
        
    }
    function reservaMes($anio, $mes)
    {
        $this->db->select("t_reservas.id, t_reservas.id_habitacion as habitacion,t_reservas.late, DAY( t_reservas.fecha_llegada ) as dia_desde, DAY( t_reservas.fecha_salida) as dia_hasta, t_clientes.nombre,t_reservas.notas, 
            DATEDIFF( t_reservas.fecha_salida, t_reservas.fecha_llegada ) as dias");
       // $this->db->from("t_reservas");
        $this->db->join("t_clientes","t_reservas.id_cliente = t_clientes.id");
        $this->db->order_by("t_reservas.id","desc");
        $this->db->order_by("t_reservas.fecha_salida","desc");
        $condiciones = array (
                        'Year(t_reservas.fecha_llegada)'=>$anio,
                        'Month(t_reservas.fecha_llegada)'=>$mes
                        );
        $resultado = $this->db->get_where('t_reservas',$condiciones);
        return $resultado->result();
    }
    
    function getReserva($id)
    {
                $variable = "SELECT  `t_reservas`.`id` ,`t_reservas`.`id` as id_reserva , `t_habitaciones`.`nombre` AS habitacion,`t_reservas`.`id_habitacion`, `t_reservas`.`fecha_llegada`,`t_reservas`.`hora_llegada`, `t_reservas`.`fecha_salida`,`t_reservas`.`hora_salida`,`t_reservas`.`estado`,`t_reservas`.`id_cliente`,`t_reservas`.`cant_adultos`,`t_reservas`.`cant_menores`,`t_reservas`.`id_procedencia`,
                    DAY( t_reservas.fecha_llegada ) AS dia_desde, DAY( t_reservas.fecha_salida ) AS dia_hasta,`t_reservas`.`id_tipo_habitacion`, `t_reservas`.`senia`, `t_reservas`.`fecha_senia`,`t_reservas`.`deposito`,`t_reservas`.`notas` ,`t_reservas`.`late` ,STR_TO_DATE(`t_reservas`.`fecha_usuario`,'%Y-%m-%d %H:%i:%s') as fecusuario,
                    `t_clientes`.* , DATEDIFF( t_reservas.fecha_salida,  `t_reservas`.`fecha_llegada` ) AS dias,`t_reservas`.`sin_cargo`,DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(`t_clientes`.`fecha_nac`)),'%Y')+0 as anios, 
                     `t_reservas`.`monto`,  `t_reservas`.`monto` * DATEDIFF( t_reservas.fecha_salida,  `t_reservas`.`fecha_llegada` ) AS total FROM (`t_reservas`)
                     JOIN  `t_clientes` ON  `t_reservas`.`id_cliente` =  `t_clientes`.`id` 
                     JOIN  `t_habitaciones` ON  `t_reservas`.`id_habitacion` =  `t_habitaciones`.`id` 
                     WHERE  `t_reservas`.`id` =". $id . " and  `t_reservas`.`estado` <>3";
        
        $resultado =$this->db->query($variable);
        return $resultado->first_row();
    }
    
    function listarTodos()
    {
        $this->db->select('t_reservas.id ,t_reservas.id as id_reserva , t_habitaciones.nombre AS habitacion,t_reservas.id_habitacion, t_reservas.fecha_llegada,t_reservas.hora_llegada, t_reservas.fecha_salida,t_reservas.hora_salida,t_reservas.estado,t_reservas.id_cliente,t_reservas.cant_adultos,t_reservas.cant_menores,t_reservas.id_procedencia,
                    DAY( t_reservas.fecha_llegada ) AS dia_desde, DAY( t_reservas.fecha_salida ) AS dia_hasta,t_reservas.id_tipo_habitacion,t_reservas.senia, t_reservas.fecha_senia,t_reservas.deposito, t_reservas.notas,t_reservas.late,
                    CONCAT(t_clientes.apellido," ",t_clientes.nombre) as pasajero , DATEDIFF( t_reservas.fecha_salida, t_reservas.fecha_llegada) AS dias,t_reservas.sin_cargo,t_reservas.monto,t_reservas.monto * DATEDIFF( t_reservas.fecha_salida,t_reservas.fecha_llegada ) AS total', FALSE); 
        $this->db->from('t_reservas');
        $this->db->join('t_habitaciones', 't_reservas.id_habitacion = t_habitaciones.id');
        $this->db->join('t_clientes', 't_reservas.id_cliente = t_clientes.id');
        $this->db->where('t_reservas.estado <>', 3);
        
        $resultado = $this->db->get();
        return $resultado->result();
        
    }
    
    function  reservaPrueba($anio, $mes)
    {
 
        
        
        $variable = "SELECT `t_habitaciones`.`nombre`, `t_reservas`.`id`,
                    `t_habitaciones`.`id` as habitacion, DAY( t_reservas.fecha_llegada ) as dia_desde, 
                    DAY( t_reservas.fecha_salida) as dia_hasta, 
                    DATEDIFF( t_reservas.fecha_salida, `t_reservas`.`fecha_llegada` ) as dias, 
                    t_reservas.fecha_llegada as fecha, MONTH( t_reservas.fecha_llegada ) as mes_desde,
                    t_reservas.estado, CONCAT(t_clientes.id, '-', t_clientes.apellido,  ', ', t_clientes.nombre) as cliente, t_reservas.id_procedencia as procedencia,
                    t_reservas.pagado
                    FROM (`t_habitaciones`) left OUTER JOIN `t_reservas` ON `t_reservas`.`id_habitacion` = `t_habitaciones`.`id` 
                    INNER JOIN t_clientes on t_clientes.id = t_reservas.id_cliente
                    WHERE t_reservas.estado <> 3 AND ((Year(t_reservas.fecha_llegada) = ". $anio . " AND Month(t_reservas.fecha_llegada) = ". $mes ." ) or (t_reservas.fecha_llegada is null or t_reservas.fecha_llegada is null) or ( DATE('" . $anio . "-" . $mes . "-1 01:02:03')  between t_reservas.fecha_llegada and t_reservas.fecha_salida ))

                    UNION

                    SELECT  nombre, null as 'id', id as 'habitacion', null as 'dia_desde', null as 'dia_hasta', null as 'dias', 
                    DATE('1900-1-1 01:02:03') as fecha, -20 as mes_desde, null as estado, null as cliente, null as procedencia,
                    null as pagado
                    from t_habitaciones 
                    ORDER BY habitacion asc, fecha asc";
        
        $resultado =$this->db->query($variable);
        // $this->db->get();
        return $resultado->result();
    }
    
    function grabarPagos($idreserva, $montor,$fecha,$montoc,$montot,$montose,$montol){
       $usua=$this->session->userdata('usuario');
       if($montot>0){
            $sql_res="INSERT INTO t_reservas_pago (id_reserva, fecha_usuario, usuario,anulado,fecha_pago,monto_reserva, monto_consumo,monto_total,monto_senia,late_checkout) 
                       values('".$idreserva ."',NOW(),'".$usua ."',0,'".$fecha."','".$montor."','".$montoc."','".$montot."','".$montose."','".$montol."')"; 

            $this->db->trans_start();
            $this->db->query($sql_res);
            $this->db->trans_complete(); 
            if($this->db->trans_status() == FALSE)
            {
                show_error('Error en la insercion. CODIGO: ' . $this->db->_error_message());
            }
        }
        $this->db->trans_start();
        $datos = array('estado'=>2,
                'pagado'=>1);
        $this->db->where('id',$idreserva);
        $this->db->update('t_reservas',$datos);
        $this->db->trans_complete();
        if($this->db->trans_status() == FALSE)
        {
            show_error('Error en la insercion. CODIGO: ' . $this->db->_error_message());
        }else{
            header('Location: ' . base_url() . 'creserva'); 
        }
    }
    
    function getHistoriaReservas($mostrar,$todos,$documento="",$habitacion="",$pasajero="",$desde="",$hasta="", $limite,$principio)
    {
        $this->db->select( $mostrar, FALSE); 
        $this->db->from('t_reservas');
        $this->db->join('t_habitaciones', 't_reservas.id_habitacion = t_habitaciones.id');
        $this->db->join('t_clientes', 't_reservas.id_cliente = t_clientes.id');
              
        if($todos == 1)
           {
               $this->db->where('t_reservas.estado <> ', 3 );
           }else
           {
               $this->db->where('t_reservas.estado <> ', 3 );
               if($habitacion!=""){
                   $this->db->like('t_habitaciones.nombre', rtrim($habitacion),$limite,$principio);
                }
                if($documento!=""){
                   $this->db->like('t_clientes.documento', rtrim($documento),$limite,$principio);
                }
               if($pasajero!=""){
                   $this->db->like('t_clientes.apellido', rtrim($pasajero),$limite,$principio);
                }
                if($desde!="" and $hasta!=""){
                    $this->db->where('fecha_llegada >=',$desde,$limite,$principio);
                    $this->db->where('fecha_llegada <=',$hasta,$limite,$principio);
                }
               
           }    
        $resultado = $this->db->get();
        return $resultado->result();
        
    }
    
     public function anular($id,$idcliente,$senia)
    {
            $usua=$this->session->userdata('usuario');      
           if ($senia!=0 and $_POST['estado']==0){
             
            
            $sql_clie="UPDATE t_clientes SET saldo_favor='".$_POST["senia"]."', fecha_usuario=NOW(), id_usuario='".$usua."', fecha_vto=DATE_ADD(NOW(),INTERVAL 6 MONTH) WHERE id='".$idcliente."'"; 

            $this->db->trans_start();
            $this->db->query($sql_clie);
            $this->db->trans_complete(); 
            if($this->db->trans_status() == FALSE)
            {
                show_error('Error en la insercion. CODIGO: ' . $this->db->_error_message());
            }else { 
                header('Location: ' . base_url() . 'ccliente'); 
                
            }
         
         }
        
            $this->db->trans_start();
            $this->db->where('id_reserva',$id);
            $datos = array('anulado'=>1);
            $this->db->update('t_reservas_pago',$datos);
            $this->db->trans_complete(); 
            if($this->db->trans_status() == FALSE)
            {
                show_error('Error de baja. CODIGO: ' . $this->db->_error_message());
            }
            
            $this->db->trans_start();
            $this->db->where('id',$id);
            $datos = array('estado'=>3);
            $this->db->update('t_reservas',$datos);
            $this->db->trans_complete(); 
            if($this->db->trans_status() == FALSE)
            {
                show_error('Error de baja. CODIGO: ' . $this->db->_error_message());
            }else{
                header('Location: ' . base_url() . 'creserva'); 
            }
        
    }
    
    function  validarReserva($id_reserva, $fecha_desde, $fecha_hasta, $id_habitacion)
    {
 
        
        $variable = "select * 
                        from t_reservas 
                        where id_habitacion = " . $id_habitacion . " and id != " . $id_reserva . " and estado != 3 
                        and (
                                (  '" . $fecha_desde . "' <= fecha_llegada and fecha_llegada < '" . $fecha_hasta . "' ) 
                                or ( '" . $fecha_desde . "' < fecha_salida and fecha_salida <= '" . $fecha_hasta . "' )
                             ) ";
        
        $resultado =$this->db->query($variable);
        // $this->db->get();
        
        return  $resultado->result();
    }
    
}

?>